package com.hui.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hui.admin.dto.request.AnnouncementDeleteBatchRequestDTO;
import com.hui.admin.dto.request.AnnouncementExportRequestDTO;
import com.hui.admin.dto.request.AnnouncementPageRequestDTO;
import com.hui.admin.dto.request.AnnouncementSaveRequestDTO;
import com.hui.admin.dto.response.AnnouncementPageResponseDTO;
import com.hui.admin.dto.response.AnnouncementResponseDTO;
import com.hui.admin.entity.AnnouncementDO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 公告服务接口
 */
public interface AnnouncementService extends IService<AnnouncementDO> {

    /**
     * 新增公告
     *
     * @param requestDTO 请求参数
     */
    void createAnnouncement(AnnouncementSaveRequestDTO requestDTO);

    /**
     * 删除公告
     *
     * @param id 公告 ID
     */
    void deleteAnnouncement(Long id);

    /**
     * 批量删除公告
     *
     * @param requestDTO 请求参数
     */
    void deleteAnnouncements(AnnouncementDeleteBatchRequestDTO requestDTO);

    /**
     * 分页查询
     *
     * @param requestDTO 请求参数
     * @return 响应实体
     */
    AnnouncementPageResponseDTO getAnnouncementPage(AnnouncementPageRequestDTO requestDTO);

    /**
     * 修改公告
     *
     * @param requestDTO 请求参数
     */
    void updateAnnouncement(AnnouncementSaveRequestDTO requestDTO);

    /**
     * 修改公告状态
     * @param id ID
     * @param status 状态
     */
    void updateAnnouncementStatus(Long id, Integer status);

    /**
     * 修改公告置顶状态
     * @param id ID
     * @param isTop 置顶状态
     */
    void updateAnnouncementIsTop(Long id, Integer isTop);

    /**
     * 导出公告数据
     *
     * @param response 响应
     * @param requestDTO 请求参数
     */
    void exportAnnouncements(HttpServletResponse response, AnnouncementExportRequestDTO requestDTO);

    /**
     * 导入公告数据
     *
     * @param file 文件
     */
    void importAnnouncements(MultipartFile file);

    /**
     * 获取公告列表
     *
     * @return 响应实体
     */
    List<AnnouncementResponseDTO> getAnnouncementList();

}
